package com.songhq.data.controller;

import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.songhq.data.service.UserClient;

@RestController
@RequestMapping("/v1/test")
public class DataController {
	
	@Autowired
	private UserClient userClient;
	
	@Autowired
	private RestTemplate restTemplate;
	
	
	@RequestMapping("/hello")
	public String getHelloData() {
		
		return "hello data";
	}
	
	@RequestMapping("/remote/user")
	public String getUserTest() throws Exception {
		String user = userClient.callUserTest();
		return user;
	}
	
	//使用restTempalte调用  微服务名   appuesr为微服务名， 有负载均的效果（轮询的方式） 但没有断路器的重试的机制 ，加上了 @HystrixCommand 才有
	//即由于eureka的自我保护策略，非正常下线的服务还在注册中心，使用轮询的方式会反问到已经下线的服务，使用restTemplate 不会去熔断和重试 而使用 feign调用的话会重试
	
	@HystrixCommand(fallbackMethod = "error")
	@RequestMapping(value = "/ribbon-consumer",method = RequestMethod.GET)
	public String helloController() {
	    return restTemplate.getForEntity("http://appuser/v1/user/test", String.class).getBody();
	}
	
	public String error() {
		
		return "hystrixCommand has do";
	}
	
	
}
